package com.onec.service.channel.service.channel.base;

import com.onec.service.api.dto.request.channel.ChannelMerchantReq;
import com.onec.service.api.dto.response.channel.ChannelMerchantResp;
import com.onec.service.channel.entity.ChannelInfo;
import org.springframework.beans.factory.InitializingBean;

import javax.servlet.http.HttpServletRequest;
import java.math.RoundingMode;

/**
 * 通道方法设计
 *
 * @author ONEC
 */
public interface BaseChannelMerchantService extends InitializingBean {

    /*************************基础信息部分***************************/

    /**
     * 通道小数保留进位方式
     *
     * @return
     */
    RoundingMode getRoundingMode();


    /*************************商户部分******************************/
    /**
     * 交易商户是否需要向上游报单
     *
     * @return false
     */
    boolean needRegister();

    /**
     * 通道商户注册通用
     *
     * @param
     * @return
     */
    ChannelMerchantResp register(ChannelMerchantReq channelMerchantReq, ChannelInfo channelInfo);

    /**
     * 通道商户产品开通通用
     */
    ChannelMerchantResp productOpen(ChannelMerchantReq channelMerchantReq, ChannelInfo channelInfo);

    /**
     * 通道商户费率修改/添加通用
     */
    ChannelMerchantResp updateMerchantFee(ChannelMerchantReq merchantInfoParam, ChannelInfo channelInfo);

    /**
     * 通道商户结算修改/添加通用
     */
    ChannelMerchantResp updateMerchantSettle(ChannelMerchantReq merchantInfoParam, ChannelInfo channelInfo);


    /**
     * 商户注册信息查询
     */
    ChannelMerchantResp queryMerchantApi(ChannelMerchantReq channelMerchantReq, ChannelInfo channelInfo);

    /**
     * 商户账户信息查询
     */
    ChannelMerchantResp queryMerchantAmountApi(ChannelMerchantReq channelMerchantReq, ChannelInfo channelInfo);

    /**
     * 结算信息查询
     */
    ChannelMerchantResp querySettleApi(ChannelMerchantReq channelMerchantReq, ChannelInfo channelInfo);

    /**
     * 商户注册异步通知
     */
    ChannelMerchantResp notifyMerchantApi(HttpServletRequest request);

    /**
     * 商户结算异步通知
     */
    ChannelMerchantResp notifySettleApi(HttpServletRequest request);


    /**
     * 验证当前商户是否可以交易：
     * 1，是否需要二级商户，二级商户状态是否正常，商户是否可以做当前产品。
     * 对不符合条件的商户：尝试入驻上游。尝试是否可有做交易。
     *
     * @return
     */
    boolean checkMerchantTradeValue(ChannelMerchantReq channelMerchantReq, ChannelInfo channelInfo);


}
